/**
 * 类是什么？分类归类
 * 面向对象（万物皆对象）
 * 人、物体、食品、生活用品都可成为对象
 * 对象有很多种，我们可以用类的概念将对象进行整合分类
 */
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        if (typeof b !== "function" && b !== null)
            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
//语法：class 类的名称（开头用大写字母）
//描述一个人的类
var Person = /** @class */ (function () {
    //构造方法
    function Person(name) {
        //this.name   是编写类时创建的属性
        this.name = name; //赋值
    }
    //人的行为
    Person.prototype.action = function (params) {
        return "".concat(this.name, "\u5728").concat(params); //`${}`模板字符串
    };
    return Person;
}());
//类的使用需要实例化（创建）
var p = new Person('张三'); //这里的参数时传递给constructor构造方法中定义的参数
console.log(p.action("吃饭"));
//类的继承通过extends进行继承的
//可以继承父类中的属性、方法
var Doctor = /** @class */ (function (_super) {
    __extends(Doctor, _super);
    //子类的构造方法，创建子类时传递参数
    function Doctor(name) {
        return _super.call(this, name) || this; //初始化父类的构造方法，把父类属性继承过来
    }
    Doctor.prototype.work = function (params) {
        return "".concat(this.name, "\u5728").concat(params);
    };
    return Doctor;
}(Person));
//创建医生子类的对象
var d = new Doctor('王医生');
console.log(d.action('工作'));
console.log(d.work("看诊"));
